package com.shujia.wyh.day02;

/*
    位运算符：
        <<:左移 就是将左边的操作数在内存中的二进制数据左移右边操作数指定的位数，右边被移空的部分补0。相当于乘与2的倍数
        >>:右移 将补码右移若干位，右边多出的位数丢弃，左边最高位是0就用0补齐，最高位是1就用1补齐
        >>>:无符号右移 将补码右移若干位，右边多出的位数丢弃,左边最高位，无论是1还是0，一律用0补齐
 */
public class WeiOptDemo2 {
    public static void main(String[] args) {
        System.out.println(2<<2);  // 2 * 2^2   x<<y ==> x*2^y

        System.out.println(24>>2);  //6 24/2^2
        System.out.println(-24>>2);  //-6  -24/2^2   x>>y  ==> x/2^y

        System.out.println(-24>>>2); //1073741818
    }
}

/*
    2的补码：00000000 00000000 00000000 00000010

           00000000 00000000 00000000 00000010
       (00)00000000 00000000 00000000 00001000  --> 8


    24的原码：00000000 00000000 00000000 00011000
    24的补码：00000000 00000000 00000000 00011000
        补码  00000000 00000000 00000000 00000110(00)  --> 6

   -24的原码：10000000 00000000 00000000 00011000
   -24的反码：11111111 11111111 11111111 11100111
   -24的补码: 11111111 11111111 11111111 11101000
     补码：   11111111 11111111 11111111 11111010(00)
     反码：   11111111 11111111 11111111 11111001
     原码：   10000000 00000000 00000000 00000110  ---> -6


           11111111 11111111 11111111 11101000
           0011111111 11111111 11111111 111010(00)
 */
